package com.ruoyi.pos.domain.cashier;

import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotNull;

/**
 * POS收银员柜组关联实体类
 * 
 * 用于管理收银员与柜组的多对多关联关系
 * 
 * @author POS System
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class PosCashierGroup extends BaseEntity {
    
    private static final long serialVersionUID = 1L;

    /**
     * 关联ID（主键）
     */
    private Long relationId;

    /**
     * 收银员ID
     */
    @Excel(name = "收银员ID")
    @NotNull(message = "收银员ID不能为空")
    private Long cashierId;

    /**
     * 柜组ID（对应sys_dept表）
     */
    @Excel(name = "柜组ID")
    @NotNull(message = "柜组ID不能为空")
    private Long groupId;

    /**
     * 是否默认柜组(0否 1是)
     */
    @Excel(name = "是否默认", readConverterExp = "0=否,1=是")
    private String isDefault;

    /**
     * 是否启用(0否 1是)
     */
    @Excel(name = "是否启用", readConverterExp = "0=否,1=是")
    private String isEnabled;

    /**
     * 权限级别（1查看 2操作 3管理）
     */
    @Excel(name = "权限级别", readConverterExp = "1=查看,2=操作,3=管理")
    private String permissionLevel;

    /**
     * 排序号
     */
    @Excel(name = "排序号")
    private Integer sortOrder;

    /**
     * 备注
     */
    @Excel(name = "备注")
    private String remark;

    // ==================== 扩展字段（非数据库字段） ====================

    /**
     * 收银员编号
     */
    @Excel(name = "收银员编号")
    private String cashierCode;

    /**
     * 收银员姓名
     */
    @Excel(name = "收银员姓名")
    private String cashierName;

    /**
     * 柜组名称
     */
    @Excel(name = "柜组名称")
    private String groupName;

    /**
     * 柜组编码
     */
    @Excel(name = "柜组编码")
    private String groupCode;

    // ==================== 业务方法 ====================

    /**
     * 判断是否启用
     */
    public boolean isEnabled() {
        return "1".equals(this.isEnabled);
    }

    /**
     * 判断是否为默认柜组
     */
    public boolean isDefault() {
        return "1".equals(this.isDefault);
    }

    /**
     * 判断是否有查看权限
     */
    public boolean hasViewPermission() {
        return "1".equals(this.permissionLevel) || hasOperatePermission() || hasManagePermission();
    }

    /**
     * 判断是否有操作权限
     */
    public boolean hasOperatePermission() {
        return "2".equals(this.permissionLevel) || hasManagePermission();
    }

    /**
     * 判断是否有管理权限
     */
    public boolean hasManagePermission() {
        return "3".equals(this.permissionLevel);
    }

    /**
     * 获取权限级别描述
     */
    public String getPermissionLevelDesc() {
        switch (this.permissionLevel) {
            case "1":
                return "查看";
            case "2":
                return "操作";
            case "3":
                return "管理";
            default:
                return "无权限";
        }
    }

    // ==================== 备用扩展字段 ====================
    
    /**
     * 备用字段1
     */
    private String reserved1;

    /**
     * 备用字段2
     */
    private String reserved2;

    /**
     * 备用字段3
     */
    private String reserved3;

    /**
     * 备用字段4
     */
    private String reserved4;

    /**
     * 备用字段5
     */
    private String reserved5;
}
